#include "Fractie.h"
Fractie::Fractie()
{
    this->nrt=0.0;
    this->nmt=0.0;
}
Fractie::Fractie(int x, int y)
{
    this->nrt=x;
    this->nmt=y;
}
ostream& operator<<(ostream& afis, const Fractie& x)
{
    afiseaza<<x.nrt<<"/"<<x.nmt;
    return afis;
}
int Fractie::getNRT()
{
    return this->nrt;
}
int Fractie::getNMT()
{
    return this->nmt;
}
void Fractie::setNRT(int x)
{
    this->nrt=x;
}
void Fractie::setNMT(int x)
{
    this->nmt=x;
}
int Fractie::ncomun(Fractie x)
{
        int a,b,k,i;
        if (this->getNMT()==x.getNMT()) return this->getNMT();
        else
        {
                a=this->getNMT();
                b=x.getNMT();
                if(a<b)  k=b;
                else k=a;
                for(i=k;;i++)
                if(i%a==0 && i%b==0) return i;
        }
}
Fractie Fractie::simplificare()
{
        int q,t,y,z;
        q=this->getNRT();
        t=this->getNMT();
        y=q;
        z=t;
        while(y!=z){
        if (y>z) y=y-z;
        else z=z-y; }
        q=q/y;
        t=t/y;
        this->setNRT(q);
        this->setNMT(t);
}
Fractie Fractie::operator+(Fractie x)
{
  int q,t,y,z,n;
  q=this->getNRT();
  t=this->getNMT();
  y=x.getNRT();
  n=this->ncomun(x);
  z=x.getNMT();
  q=q*n/t;
  t=n;
  y=y*n/z;
  Fractie s=Fractie(q+y,t);
  s.simplificare();
  return s;
}
Fractie Fractie::operator-(Fractie x)
{
  int q,t,y,z,n;
  q=this->getNRT();
  t=this->getNMT();
  y=x.getNRT();
  z=x.getNMT();
  n=this->ncomun(x);
  q=q*n/t;
  t=n;
  y=y*n/z;
  Fractie dif=Fractie(q-y,t);
  dif.simplificare();
  return dif;
}
Fractie Fractie::operator*(Fractie x)
{
    int q,t,y,z;
    q=this->getNRT();
    t=this->getNMT();
    y=x.getgetNRT();
    z=x.getNMT();
    Fractie p=Fractie(q*y,t*z);
    p.simplificare();
    return p;
}
Rational Rational::operator/(Rational x)
{
    int q,t,y,z;
    q=this->getNRT();
    t=this->getNMT();
    y=x.getgetNRT();
    z=x.getNMT();
    Fractie i=Fractie(q*z,t*y);
    i.simplificare();
    return i;
}
bool Fractie::operator==(Fractie x)
{
    int q,t,y,z,n;
    q=this->getNRT();
    t=this->getNMT();
    y=x.getgetNRT();
    z=x.getNMT();
    n=this->ncomun(x);
    q=q*n/t;
    y=y*n/z;
    if (q==y) return true;
    else return false;
}
bool Fractie::operator<(Fractie x)
{
    int q,t,y,z,n;
    q=this->getNRT();
    t=this->getNMT();
    y=x.getgetNRT();
    z=x.getNMT();
    n=this->ncomun(x);
    q=q*n/t;
    y=y*n/z;
    if (q<y) return true;
    else return false;
}
bool Fractie::operator>(Fractie x)
{
    int q,t,y,z,n;
    q=this->getNRT();
    t=this->getNMT();
    y=x.getgetNRT();
    z=x.getNMT();
    n=this->ncomun(x);
    q=q*n/t;
    y=y*n/z;
    if (q>y) return true;
    else return false;
}
bool Fractie::operator<=(Fractie x)
{
    int q,t,y,z,n;
    q=this->getNRT();
    t=this->getNMT();
    y=x.getgetNRT();
    z=x.getNMT();
    n=this->ncomun(x);
    q=q*n/t;
    y=y*n/z;
    if (q<=y) return true;
    else return false;
}
bool Fractie::operator>=(Fractie x)
{
    int q,t,y,z,n;
    q=this->getNRT();
    t=this->getNMT();
    y=x.getgetNRT();
    z=x.getNMT();
    n=this->ncomun(x);
    q=q*n/t;
    y=y*n/z;
    if (q>=y) return true;
    else return false;
}

Fractie Fractie::operator+(int x)
{
  int q,t;
  q=this->getNRT();
  t=this->getNMT();
  Fractie s=Fractie(q+x*t,t);
  s.simplificare();
  return s;
}
Fractie Fractie::operator-(int x)
{
  int q,t;
  q=this->getNRT();
  t=this->getNMT();
  Fractie d=Fractie(q-x*t,t);
  d.simplificare();
  return d;
}
Fractie Fractie::operator*(int x)
{
  int q,t;
  q=this->getNRT();
  t=this->getNMT();
  Fractie p=Fractie(q*x,t);
  p.simplificare();
  return p;
}
Fractie Fractie::operator/(int x)
{
  int q,t;
  q=this->getNRT();
  t=this->getNMT();
  Fractie i=Fractie(q,t*x);
  i.simplificare();
  return i;
}
